// token的生成与加密
const jwt = require('jsonwebtoken') // 引入token的生成
const Auth = require('basic-auth') // 解密与验证是否过期
const result = require('./yichang-results')
const encryption = 'liuxuhui' // 参与加密的token值
const expiresIn = 60 * 60 * 60 * 60 //（简称Token）的过期时间

// 函数 token的生成与加密
function gentoken(uid, scope = 2) {// 参与加密的值scope
    return jwt.sign({ uid, scope }, encryption, { expiresIn }) // expiresIn 固定的值
}


// 函数验证 token是否过期与解密
class Decryption {
    constructor() { }
    // get : 取值函数 set ：存值函数
    get m() { // 中间件
        return async (ctx, next) => {
            const token = Auth(ctx.req) //验证token的合法性
            if (!token || !token.name) {
                throw new result({ errcode: '401', msg: '没有访问权限' }, 401)
            }
            try {
                console.log(token.name,'token2');
                var code = jwt.verify(token.name, encryption)
            } catch (error) {
               if (error.name == 'TokenExpiredError') {
                throw new result({ errcode: '401', msg: '账号已过期，请重新登录' }, 401)
               }
               throw new result({ errcode: '401', msg: '没有访问权限' }, 401)
            }
            ctx.auth = {
                uid: code.uid,// 商家uid（唯一标识）
                // scope:scope // 暂时无用 加密数字
            }
           await next()
        }
    }
}



module.exports = { gentoken, Decryption }



// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiIxNjcwMDU1NjIzMjE0Iiwic2NvcGUiOjIsImlhdCI6MTY3MDA4NzU0NCwiZXhwIjoxNjgzMDQ3NTQ0fQ.CfgXpPBdHaSvdIYECrrb1QTzyaRAev4xYV1VyQK42IM





